package com.odontosis.as;

import java.util.List;

/**
 * Interface que define os mtodos padres de todas as classes de controle
 * 
 * @author pablo
 *
 * @param <T>
 */
public interface OdontosisApplication<T> {
	/**
	 * Persiste ou atualiza a entidade no BD
	 */
	void saveOrUpdate(T entidade);
	
	/**
	 * Persiste a entidade no BD
	 * 
	 * @param entidade
	 */
	void save(T entidade);
	
	/**
	 * Atualiza a entidade no BD
	 * 
	 * @param entidade
	 */
	void update(T entidade);
	
	/**
	 * Deleta a entidade do BD
	 * 
	 * @param entidade
	 */
	void delete(T entidade);
	
	/**
	 * Desassocia a entidade do banco de dados
	 * 
	 * @param entidade
	 */
	void evict(T entidade);
		
	/**
	 * Associa a entidade ao BD
	 *  
	 * @param entidade
	 * @return
	 */
	T merge(T entidade);
	
	/**
	 * Carrega um objeto a partir do Id
	 * 
	 * @param id
	 * @return
	 */
	T load(Long id);
	
	/**
	 * 
	 */
	List<T> findAll();
	
	void excluirLogicamente(T entidade);

}
